#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int modarray(int **a,int n)
{
	int i;
	for(i=0;i<n;i++) (*a)[i]=i*i;
	return 0;
}

int printarray(int **a,int n)
{
	int i;
	for(i=0;i<n;i++) printf("%d ",(*a)[i]);
	printf("\n");
	return 0;
}

int checkarraypointer(void)
{
	int i,n;
	int *a;
	scanf("%d",&n);
	a=(int *)malloc(n*sizeof(int));
	for(i=0;i<n;i++) scanf("%d",&a[i]);
	printarray(&a,n);
	modarray(&a,n);
	printarray(&a,n);
	free(a);
	return 0;
}

int print2darray(int ***a,int *v,int n)
{
	int i,j;
	for(i=0;i<n;i++) 
	{
		for(j=0;j<v[i];j++) printf("%d ",(*a)[i][j]);
		printf("\n");
	}
	printf("\n");
	return 0;
}

int mod2darray(int ***a,int *v,int n)
{
	int i,j;
	for(i=0;i<n;i++) for(j=0;j<v[i];j++) (*a)[i][j]=(i*j)/2;
	return 0;
}

int check2darraypointer(void)
{
	int i,j,n;
	int *v;
	int **a;
	scanf("%d",&n);
	v=(int *)malloc(n*sizeof(int));
	a=(int **)malloc(n*sizeof(int *));
	for(i=0;i<n;i++) scanf("%d",&v[i]);
	for(i=0;i<n;i++) a[i]=(int *)malloc(v[i]*sizeof(int));
	for(i=0;i<n;i++) for(j=0;j<v[i];j++) a[i][j]=i*j;
	print2darray(&a,v,n);
	mod2darray(&a,v,n);
	print2darray(&a,v,n);
	for(i=0;i<n;i++) free(a[i]);
	free(a);
	free(v);
	return 0;
}

int main()
{
	int i;
	checkarraypointer();
	check2darraypointer();
	return 0;
}
